/**
 * 有效括号匹配
 * 栈的应用
 * @param {string} s 
 * @returns 
 */
var isValid = function (s) {
    // 创建map，左括号作为key，右括号作为value，方便查询
    const mappings = new Map()
    mappings.set("(", ")")
    mappings.set("[", "]")
    mappings.set("{", "}")

    let stack = []
    for (let i = 0; i < s.length; i++) {
        // map里有相应的key，说明遇到左括号，则从map里取得对应的右括号放进stack
        if (mappings.has(s[i])) {
            stack.push(mappings.get(s[i]))
        } else {
            // 否则遇到了右括号,取出stack里的最后一个元素(pop)查看是否等于当前元素,不相同则返回false
            if (stack.pop() !== s[i]) {
                return false
            }
        }
    }

    // 循环结束后stack不为空则返回false
    if (stack.length !== 0) {
        return false
    }

    return true
}